<!DOCTYPE html>
<html>
    <head>
        <title>观察者模式</title>
    </head>
    <body>
        <script>
            //  发布者-目标
            class Dep {
                constructor () {
                    // 记录所有的订阅者
                    this.subs = []
                }
                // 添加订阅者
                addSub (sub) {
                    // 添加的这个对象必须存在，还具有update方法
                    if(sub && sub.update) {
                        this.subs.push(sub)
                    }

                }
                // 发布通知 当事件发生的时候通知所有的订阅者调用update方法
                notify () {
                    this.subs.forEach(sub => {
                        sub.update()
                    })
                }
            }
            // 订阅者-观察者
            class Watcher {
                // 当事件发生的时候由发布者来调用update
                update () {
                    console.log('update')
                }
            }
            // 测试
            let dep = new Dep()
            let watcher = new Watcher()

            dep.addSub(watcher)
            dep.notify()
        </script>
    </body>
</html>